#!/bin/bash
# MySQL数据库备份与恢复脚本
# 用于备份hair_salon_vip数据库并在其他电脑上恢复运行

# 数据库配置信息
DB_NAME="hair_salon_vip"
DB_USER="root"
DB_PASS="@zyc0131"
DB_HOST="127.0.0.1"
DB_PORT="3306"

# 备份目录
BACKUP_DIR="db/backup"
# 备份文件名格式: hair_salon_vip_YYYYMMDD_HHMMSS.sql
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.sql"

# 确保备份目录存在
mkdir -p "$BACKUP_DIR"

# 备份数据库
function backup_database() {

    echo "开始备份数据库: $DB_NAME"
    echo "备份文件将保存到: $BACKUP_FILE"
    
    # 使用mysqldump命令备份数据库
    mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS --databases $DB_NAME > "$BACKUP_FILE"
    
    if [ $? -eq 0 ]; then
        echo "数据库备份成功！"
        
        
        echo -e "\n备份完成，可以使用以下命令查看备份文件："
        echo "  $0 list"
        echo -e "\n恢复数据库可以使用："
        echo "  $0 restore "
    else
        echo "数据库备份失败！"
        # 清理失败的备份文件
        rm -f "$BACKUP_FILE"
    fi
}

# 恢复数据库
function restore_database() {
    
    RESTORE_FILE="$BACKUP_FILE"
    
    # 检查备份文件是否存在
    if [ ! -f "$RESTORE_FILE" ]; then
        echo "错误：备份文件 '$RESTORE_FILE' 不存在！"
        return 1
    fi
    
    echo "开始恢复数据库: $DB_NAME"
    echo "使用备份文件: $RESTORE_FILE"
    
    # 首先创建数据库（如果不存在）
    echo "正在创建数据库（如果不存在）..."
    mysql -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;"
    
    # 恢复数据
    echo "正在恢复数据..."
    mysql -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS $DB_NAME < $RESTORE_FILE
    
    if [ $? -eq 0 ]; then
        echo "数据库恢复成功！"
    else
        echo "数据库恢复失败！"
    fi
}

# 查看最近的备份
function list_backups() {
    echo "最近的备份文件："
    ls -ltr "${BACKUP_DIR}/${DB_NAME}_"*.sql.gz | tail -n 5
    echo -e "\n备份文件完整路径示例："
    echo "${BACKUP_DIR}/${DB_NAME}_20231231_235959.sql.gz"
    echo -e "\n使用恢复命令示例："
    echo "$0 restore ${BACKUP_DIR}/${DB_NAME}_20231231_235959.sql.gz"
}

# 打印帮助信息
function show_help() {
    echo "MySQL数据库备份与恢复工具"
    echo "用法: $0 [选项] [参数]"
    echo "选项:" 
    echo "  backup                  执行数据库备份"
    echo "  restore <tab>           恢复数据库"
    echo "  list                    查看最近的备份文件"
    echo "  help                    显示帮助信息"
    echo -e "\n示例:" 
    echo "  $0 backup                     # 备份数据库"
    echo "  $0 list                       # 查看备份文件列表"
    echo "  $0 restore ${BACKUP_DIR}/${DB_NAME}_20231231_235959.sql.gz  # 恢复数据库"
}

# 根据命令行参数执行相应功能
case "$1" in
    backup)
        backup_database
        ;;
    restore)
        restore_database 
        ;;
    list)
        list_backups
        ;;
    help|*)
        show_help
        ;;
esac